<script setup lang="ts">
import FlowNodeFormat from '/@/views/flow/form/tools/FlowNodeFormat.vue'
import { formatStartNodeShow } from '/@/api/flow/task'
import { defineExpose, onMounted, ref, watch } from 'vue'

let props = defineProps({
	flowId: {
		type: String,
		default: '',
	},
	disableSelect: {
		type: Boolean,
		default: false,
	},
	taskId: {
		type: String,
		default: '',
	},
	processInstanceId: {
		type: String,
		default: '',
	},
	formData: {
		type: Object,
		default: () => {},
	},
	selectUserNodeId: {
		type: Array,
		default: () => [],
	},
})
const row = ref([])

const queryData = (p: Record<string, any>) => {
	var data = {
		flowId: props.flowId,
		processInstanceId: props.processInstanceId,
		paramMap: p,
		taskId: props.taskId,
	}
	formatStartNodeShow(data).then((res) => {
		row.value = res.data
	})
}
watch(
	() => props.formData,
	(val) => {
		setTimeout(function () {
			if (new Date().getTime() - formDataChangeTime.value > 500) {
				formDataChangeTime.value = new Date().getTime()
				queryData(val)
			}
		}, 600)
	}
)
const formDataChangeTime = ref()
onMounted(() => {
	formDataChangeTime.value = new Date().getTime()
	queryData({})
})

const validate = () => {
	for (var k of props.selectUserNodeId) {
		var d = nodeUser.value[k as string]
		if (d && d.length > 0) {
			/* empty */
		} else {
			return false
		}
	}

	return true
}

const nodeUser = ref({})

const formatSelectNodeUser = () => {
	var obj = {}

	for (var k of props.selectUserNodeId) {
		var d = nodeUser.value[k as string]
		obj[k + '_assignee_select'] = d
	}

	return obj
}

defineExpose({ validate, formatSelectNodeUser })
</script>

<template>
	<flow-node-format :row="row" :node-user="nodeUser" :disableSelect="disableSelect" ref="flowNodeFormatRef"></flow-node-format>
</template>
